﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using RESTServicesProveedores.Dominio;
using System.Data.SqlClient;

namespace RESTServicesProveedores.Persistencia
{
    public class ProveedorDAO
    {
        public Proveedor Crear(Proveedor proveedorACrear)
        {
            Proveedor proveedorCreado = null;
            string sql = "Insert into Proveedor VALUES (@idProveedor, @RucDni, @NombreRazon, @Estado, @idUsuario)";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {

                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {

                    com.Parameters.Add(new SqlParameter("@idProveedor", proveedorACrear.idProveedor));
                    com.Parameters.Add(new SqlParameter("@RucDni", proveedorACrear.RucDni));
                    com.Parameters.Add(new SqlParameter("@NombreRazon", proveedorACrear.NombreRazon));
                    com.Parameters.Add(new SqlParameter("@Estado", proveedorACrear.Estado));
                    com.Parameters.Add(new SqlParameter("@idUsuario", proveedorACrear.idUsuario));
                    com.ExecuteNonQuery();

                }

            }
            proveedorCreado = Obtener(proveedorACrear.idProveedor.ToString());
            return proveedorCreado;

        }

        public Proveedor Obtener(string idProveedor)
        {

            Proveedor proveedorEncontrado = null;
            string sql = "Select * from Proveedor where idProveedor=@idProveedor";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@idProveedor", idProveedor));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            proveedorEncontrado = new Proveedor()
                            {

                                idProveedor = (int)resultado["idProveedor"],
                                RucDni = (string)resultado["RucDni"],
                                NombreRazon = (string)resultado["NombreRazon"],
                                Estado = (int)resultado["Estado"],
                                idUsuario = (int)resultado["idUsuario"]


                            };

                        }

                    }

                }


            }
            return proveedorEncontrado;

        }

        public ICollection<Proveedor> ListarTodos()
        {
            ICollection<Proveedor> ListaProveedor = new List<Proveedor>();
            string sql = "Select * from Proveedor";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {

                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        while (resultado.Read())
                        {
                            Proveedor proveedorEncontrado = new Proveedor();

                            proveedorEncontrado.idProveedor = (int)resultado["idProveedor"];
                            proveedorEncontrado.RucDni = (string)resultado["RucDni"];
                            proveedorEncontrado.NombreRazon = (string)resultado["NombreRazon"];
                            proveedorEncontrado.Estado = (int)resultado["Estado"];
                            proveedorEncontrado.idUsuario = (int)resultado["idUsuario"];
                            ListaProveedor.Add(proveedorEncontrado);

                        }

                    }

                }


            }
            return ListaProveedor;

        }

        public Proveedor BuscarRepetido(string NombreRazon)
        {

            Proveedor proveedorEncontrado = null;
            string sql = "Select * from Proveedor where NombreRazon=@NombreRazon";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@NombreRazon", NombreRazon));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            proveedorEncontrado = new Proveedor()
                            {

                            idProveedor = (int)resultado["idProveedor"],
                            RucDni = (string)resultado["RucDni"],
                            NombreRazon = (string)resultado["NombreRazon"],
                            Estado = (int)resultado["Estado"],
                            idUsuario = (int)resultado["idUsuario"]


                            };

                        }

                    }

                }


            }
            return proveedorEncontrado;

        }

        public Proveedor Modificar(Proveedor ProveedorAModificar)
        {
            Proveedor proveedorModificado = null;
            string sql = "Update Proveedor set RucDni=@RucDni, NombreRazon=@NombreRazon, Estado=@Estado, idUsuario=@idUsuario where idProveedor=@idProveedor";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {

                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {

                    com.Parameters.Add(new SqlParameter("@idProveedor", ProveedorAModificar.idProveedor));
                    com.Parameters.Add(new SqlParameter("@RucDni", ProveedorAModificar.RucDni));
                    com.Parameters.Add(new SqlParameter("@NombreRazon", ProveedorAModificar.NombreRazon));
                    com.Parameters.Add(new SqlParameter("@Estado", ProveedorAModificar.Estado));
                    com.Parameters.Add(new SqlParameter("@idUsuario", ProveedorAModificar.idUsuario));
                    com.ExecuteNonQuery();

                }

            }
            proveedorModificado = Obtener(ProveedorAModificar.idProveedor.ToString());
            return proveedorModificado;

        }

        public void Eliminar(string idProveedor)
        {
            string sql = "Delete from Proveedor where idProveedor=@idProveedor";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {

                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {

                    com.Parameters.Add(new SqlParameter("@idProveedor", idProveedor));
                    com.ExecuteNonQuery();

                }

            }

        }
    }
}